package cn.zsc.netdisk.mapper;

import cn.zsc.netdisk.pojo.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

/**
 * @author ccying
 * @date 2021/2/4
 */
@Mapper
@Component
public interface UserMapper {
    /**
     * 查找所有用户
     * @return 用户数组
     * */
    @Select("select uid,mobile,email,password,created from t_user")
    User[] findUser();

    /**
     * 根据用户账号查找用户记录
     * @param uid 用户账号
     * @return 用户记录
     * */
    @Select("select uid,mobile,email,password,created from t_user where uid=#{uid}")
    User findUserByUid(String uid);

    /**
     * 根据用户手机号查找用户记录
     * @param mobile 用户手机号
     * @return 用户记录
     * */
    @Select("select uid,mobile,email,password,created from t_user where mobile=#{mobile}")
    User findUserByMobile(String mobile);

    /**
     * 根据用户账号修改用户记录
     * @param user 用户信息
     * @throws Exception 执行sql语句可能抛出异常
     * */
    @Update("update t_user set mobile=#{user.mobile},email=#{user.email},password=#{user.password} where uid=#{user.uid}")
     void updateUserByUid(@Param("user") User user) throws Exception;

    /**
     * 根据用户账号修改用户手机号码
     * @param uid 用户账号
     * @param mobile 手机号码
     * @throws Exception 执行sql语句可能抛出异常
     * */
    @Update("update t_user set mobile=#{mobile} where uid=#{uid}")
     void updateMobileByUid(String uid, String mobile) throws Exception;

    /**
     * 根据用户账号修改电子邮箱
     * @param uid 用户账号
     * @param email 电子邮箱
     * @throws Exception 执行sql语句可能抛出异常
     * */
    @Update("update t_user set email=#{email} where uid=#{uid}")
    void updateEmailByUid(String uid, String email) throws Exception;

    /**
     * 根据用户手机号修改用户密码
     * @param mobile 用户手机号
     * @param password 用户新密码
     * @throws Exception 执行sql语句可能抛出异常
     * */
    @Update("update t_user set password=#{password} where mobile=#{mobile}")
    void updatePasswordByMobile(String mobile, String password) throws Exception;

    /**
     * 添加用户记录
     * @param user 用户记录
     * @throws Exception 执行sql语句可能抛出异常
     * */
    @Insert("insert into t_user(uid,mobile,password,created) value(#{user.uid},#{user.mobile},#{user.password},curdate())")
    void addUser(@Param("user") User user) throws Exception;
}
